跳到主要内容

Linux jar 包与日志处理

让 jar 包后台运行

应用场景:在应用服务以 jar 包运行时,无法像 war 包一样能直接输出日志,通常都是在 dos 窗口内,不便于查阅日志。

新建两个 shell 文件

start.sh

#! /bin/bash
java -jar "/home/happy01/happyserver/HappyTileMapServer-1.0-SNAPSHOT.jar" > /home/happy01/happyserver/fslog.txt &

# 将 jar 包启动程序的 pid 写入文件中,停止时可直接 kill pid
echo $! > /home/happy01/pid.txt

命令解释:执行 HappyTileMapServer 这个文件,并且输出到 fslog.txt 文件,& 表示后台运行

stop.sh

#! /bin/bash
PID=$(cat /home/happy01/pid.txt)
kill -9 $PID
启动项目:./start.sh
停止项目:./stop.sh

查看当前有多少在后台运行的命令

jobs -l 选项可显示所有任务的 PID,jobs 的状态可以是 running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的 shell 环境已知的列表中删除任务的进程标识;

也就是说,jobs 命令显示的是当前 shell 环境中所起的 后台正在运行或者被挂起的任务信息;

让进程放回前台

将后台中的命令调至前台继续运行 如果后台中有多个命令,可以用 fg %jobnumber 将选中的命令调出,%jobnumber 是 通过 jobs 命令查到的后台正在执行的命令的序号(不是 pid)

后台执行

将一个在后台暂停的命令,变成继续执行 (在后台执行) 如果后台中有多个命令,可以用 bg %jobnumber 将选中的命令调出,%jobnumber 是通过 jobs 命令查到的后台正在执行的命令的序号(不是 pid)

将任务转移到后台运行: 先 ctrl + z;再 bg,这样进程就被移到后台运行,终端还能继续接受命令。

显示日志的工具 tail

如果想要实时显示日志可以使用这个

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。

tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

命令格式:

tail -f /home/happy01/happyserver/fslog.txt

参数:

-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

要显示 notes.log 文件的最后 10 行,请输入以下命令:

tail notes.log         # 默认显示最后 10 行

要跟踪名为 notes.log 的文件的增长情况,请输入以下命令:

tail -f notes.log
tail -n 100 /etc/cron  #显示最后100行数据
tail -n -100 /etc/cron #除了前99行不显示外,显示第100行到末尾行

修改 jar 包里面的文件

有时候,部署上去了需要临时修改个配置文件

1、列出 jar 包中的文件清单

jar tf  HappyTileMapServer-1.0-SNAPSHOT.jar

2、提取出内部 jar 包的指定文件

# grep 查找
# 如果不加参数则解压所有的文件
# 提取出内部 jar 包的指定文件
jar xf HappyTileMapServer-1.0-SNAPSHOT.jar BOOT-INF/classes/testData.json
# 进去修改文件
vim BOOT-INF/classes/testData.json

3、更新配置文件到内部 jar 包(存在覆盖,不存在就新增)

jar uf HappyTileMapServer-1.0-SNAPSHOT.jar BOOT-INF/classes/testData.json

Reference

Linux中修改jar包中的配置文件